/* NFE
* (C) Copyright Beetlestech , Ltd. 2014, All Rights Reserved.
*/
package com.beetlestech.nfe.main.biz.com;

//import com.beetlestech.nfe.main.biz.com.dto.PwExpirationInfoDTO;
import com.beetlestech.nfe.main.biz.com.dto.AuthResultDTO;
//import com.beetlestech.nfe.main.db.tbl.EmployeeDTO;

/**
 * HbAuthentication Bizロジックのインタフェース
 *
 * 変更履歴
 * REV.         変更日付           変更者              変更内容
 * -------      ---------------    ----------------    ------------------
 * 1.0          2014/02/25         GD                  新規作成
 *
 */
public interface HbAuthentication {
	/**
	 * 認証する
	 *
	 * 処理詳細：
	 * 1「職員基本情報」のパスワードが入力値のパスワードと一致することを確認する。
	 *
	 * 21の結果がtrueの場合に、パスワードのチェックを行う。
	 *
	 * 2.1下記メソッドを呼び出して、パスワードが初期値から変更されているか確認する。
	 *
	 * メソッド名：
	 *
	 * checkPwUpdate
	 *
	 * 引渡しデータ
	 *
	 * 「職員基本情報」
	 *
	 * 2.22.1の結果がTrue(初期値変更済)の場合に、下記メソッドを呼び出して、パスワードの期限切れでないかを確認する。
	 *
	 * メソッド名：
	 *
	 * validatePwExpiration
	 *
	 * 引渡しデータ
	 *
	 * 「職員基本情報」
	 *
	 * 3「認証の可否結果」を返す。
	 *
	 * 3.12取得できない、または、3の戻る値がfalseの場合に、「認証の可否結果」をCtgCodeConstant.TLOGINLG_RESULT.LOGIN_FAILにセットする。
	 *
	 * 3.2「認証の可否結果」を返す。
	 *
	 * @param loginId ログインID  
	 * @param password パスワード  
	 * @param staffInfo 職員基本情報  
	 * @return authResult 認証の可否結果 0: 認証成功, 1:認証失敗, 2.初期パスワード未変更, 3:パスワード期限切れ
	 */
	//String authenticate(String loginId, String password, EmployeeDTO staffInfo);

	/**
	 * LDAPを用いてユーザー認証する
	 *
	 * 処理詳細：
	 * 1
	 *
	 * 1.1「ユーザー情報」.userPasswordが入力値のパスワードと一致することを確認する。
	 *
	 * 1.21.1の結果がtrue かつ　「パスワード・ポリシー」.pwdMustChangeがtrueの場合に、”入力値のユーザーIDに対するパスワードは、初期値から変更されているか" を確認する。
	 *
	 * 「ユーザー情報」.pwdResetがnull　または　falseである場合に、結果がtrueである
	 *
	 * でなければ、結果がfalseである
	 *
	 * 1.31.1の結果がtrue かつ　「パスワード・ポリシー」.pwdMustChangeがtrueの場合に、"パスワードの有効期限が切れていないか" を確認する。
	 *
	 * ※パスワード期限日 = パスワード最終更新日(「ユーザー情報」.pwdChangedTime) ＋ ( パスワード有効期限(「パスワード・ポリシー」.pwdMaxAge) / 86400)
	 *
	 * パスワード期限日 >= 現在日　の場合に、結果がtrueである
	 *
	 * でなければ、結果がfalseである
	 *
	 * 1.41.1の結果がtrue かつ　「パスワード・ポリシー」.pwdMustChangeがtrueのの場合、"パスワードの有効期限間近か" を確認する。
	 *
	 * ※パスワード期限警告日 = (1.2に計算された)パスワード期限日 － ( パスワード期限満了警告日数(「パスワード・ポリシー」.pwdExpireWarning) / 36400)
	 *
	 * パスワード期限警告日 >= 現在日　の場合に、「認証結果」.「パスワード期限情報」.「チェック結果」にtrueをセットする
	 *
	 * でなければ、「認証結果」.「パスワード期限情報」.「チェック結果」にfalseをセットする
	 *
	 * 2「認証結果」を返す。
	 *
	 * 2.1「認証の可否結果」をセットする。
	 *
	 * 1.1の戻る値がfalseの場合、下記の処理を行う。
	 *
	 * 「認証結果」.「認証の可否結果」をCtgCodeConstant.TLOGINLG_RESULT.LOGIN_FAILにセットする。
	 *
	 * 2.2「認証結果」を返す。
	 *
	 * @param loginId ログインID  
	 * @param password パスワード  
	 * @return AuthResultDTO 認証結果  
	 */
	AuthResultDTO authenticateLDAP(String loginId, String password);

	/**
	 * パスワードが初期値から変更されているかを判断する。
	 *
	 * 処理詳細：
	 * 入力値「職員基本情報」の「パスワード更新日(PW_UPDATE_DATE)」を取得する。
	 *
	 * 「パスワード更新日」を判断する。
	 *
	 * 「パスワード更新日」 ＝　"1000-01-01" の場合
	 *
	 * チェック結果をFalseとする。
	 *
	 * それ以外の場合
	 *
	 * チェック結果をTrueとする。
	 *
	 * 「チェック結果」を返す。
	 *
	 * @param staffInfo 職員基本情報  
	 * @return result チェック結果 True:初期値変更済, False:初期値未変更
	 */
	//Boolean checkPwUpdate(EmployeeDTO staffInfo);

	/**
	 * パスワードの有効期限を判断する
	 *
	 * 処理詳細：
	 * 1.0HbComblcmMaster.getComblcmInfo()より、「パスワード期限月数」を取得する
	 *
	 * メソッド名：
	 *
	 * HbComblcmMaster.getComblcmInfo()
	 *
	 * 引渡しデータ
	 *
	 * 「HbAuthenticationImpl.APPL_ID_COM」
	 *
	 * 「HbAuthenticationImpl.FUNCTION_ID_PASSWORD_POLICY」
	 *
	 * 「HbAuthenticationImpl.ITEM_ID_LOGIN_USER_ID_MODE」
	 *
	 * 2.0取得した「パスワード有効期間日数」が0より大きい場合のみ、「職員基本情報」の「パスワード更新日(PW_UPDATE_DATE)」と 1で取得した「パスワード有効期間日数」から、「パスワード期限日」を計算する。
	 *
	 * パスワード期限日 = パスワード更新日 + パスワード有効期間日数
	 *
	 * 3.0「月数差分」を判断する。
	 *
	 * 「パスワード期限満了日」 ≦ 現在日 の場合
	 *
	 * チェック結果をFalseとする。
	 *
	 * 「パスワード期限満了日」 > 現在日 もしくは 「パスワード有効期間日数」 ≦ 0 の場合
	 *
	 * チェック結果をTrueとする。
	 *
	 * @param staffInfo 職員基本情報  
	 * @return result チェック結果 True:期限内, False:期限切れ
	 */
	//Boolean validatePwExpiration(EmployeeDTO staffInfo);

	/**
	 * パスワードの有効期限切れ間近かを判断する
	 *
	 * 処理詳細：
	 * HbComblcmMaster.getComblcmInfo()より、「パスワード有効期間日数」を取得する。
	 *
	 * メソッド名：
	 *
	 * HbComblcmMaster.getComblcmInfo()
	 *
	 * 引渡しデータ
	 *
	 * 「HbAuthenticationImpl.APPL_ID_COM」
	 *
	 * 「HbAuthenticationImpl.FUNCTION_ID_PASSWORD_POLICY」
	 *
	 * 「HbAuthenticationImpl.ITEM_ID_PW_EXPIRATION」
	 *
	 * 「職員基本情報」の「パスワード更新日(PW_UPDATE_DATE)」と 1で取得した「パスワード有効期間日数」から、「パスワード期限日」を計算する。
	 *
	 * パスワード期限日 = パスワード更新日 + パスワード有効期間日数
	 *
	 * HbComblcmMaster.getComblcmInfo()より、「パスワード期限満了警告日数」を取得する。
	 *
	 * メソッド名：
	 *
	 * HbComblcmMaster.getComblcmInfo()
	 *
	 * 引渡しデータ
	 *
	 * 「HbAuthenticationImpl.APPL_ID_COM」
	 *
	 * 「HbAuthenticationImpl.FUNCTION_ID_PASSWORD_POLICY」
	 *
	 * 「HbAuthenticationImpl.ITEM_ID_ADV_NOTICE_EXPIRATION」
	 *
	 * 取得した「パスワード期限満了警告日数」が0より大きい場合のみ、2 で計算した「パスワード期限日」と現在日の「日数差分」を計算する。
	 *
	 * 「日数差分」を判断し、DTOを返す。
	 *
	 * 「パスワード期限満了警告日数」 ≧ 「日数差分」の場合
	 *
	 * チェック結果=false
	 *
	 * 「パスワード期限満了警告日数」 < 「日数差分」 もしくは 「パスワード期限満了警告日数」 ≦ 0 の場合
	 *
	 * チェック結果=true
	 *
	 * いずれの場合も、
	 *
	 * パスワード期限年=「パスワード期限日」の年部分
	 *
	 * パスワード期限月=「パスワード期限日」の月部分
	 *
	 * パスワード期限日=「パスワード期限日」の日部分
	 *
	 * パスワード期限切れまでの日数=「日数差分」
	 *
	 * とする。
	 *
	 * @param staffInfo 職員基本情報  
	 * @return pwExpirationInfoDTO パスワード期限情報  
	 */
	//PwExpirationInfoDTO notifyPwExpDate(EmployeeDTO staffInfo);

	/**
	 * パスワードを更新する
	 *
	 * 処理詳細：
	 * 1HbUserのgetValidStaffInfo()を呼び出し、「職員基本情報」を取得する。
	 *
	 * メソッド名：
	 *
	 * HbUserのgetValidStaffInfo()
	 *
	 * 引渡しデータ
	 *
	 * セッションの職員ID
	 *
	 * 現在の日付
	 *
	 * 2「例外処理」
	 *
	 * 処理１で1件でも取得できない場合は、「ApplicationException」を返す。
	 *
	 * メッセージコード
	 *
	 * M10140CM
	 *
	 * パラメーター
	 *
	 * なし
	 *
	 * 「例外処理」
	 *
	 * 検出件数が1件より多い場合は、「ApplicationException」を返す。
	 *
	 * メッセージコード
	 *
	 * メッセージID =M10190WS
	 *
	 * パラメーター
	 *
	 * 職員情報データ
	 *
	 * 31.で取得した「職員基本情報」のパスワードと、旧パスワードとが一致することを比較する。
	 *
	 * 一致しない場合は、「HbAuthenticationImpl.UPDATE_RESULT_1」を「処理結果」に設定する。
	 *
	 * 4内部メソッドを呼び出して、新パスワードがパスワードポリシーに沿っているかチェックする。
	 *
	 * メソッド名：
	 *
	 * HbAuthenticationImpl.passwordPolicyCheck()
	 *
	 * 引渡しデータ
	 *
	 * 旧パスワード
	 *
	 * 新パスワード
	 *
	 * 1.で取得した「職員基本情報」
	 *
	 * 5.04で取得するチェック結果を「処理結果」に設定する。
	 *
	 * 6.0「処理結果」は「CommonConstant.EMPTY」の場合、必要に応じて職員マスターを更新する。
	 *
	 * 6.1TSTAFFMを更新する。
	 *
	 * 「職員マスター」(TstaffmDTO)を新規作成して、更新条件をセットする。
	 *
	 * 「職員マスター」.職員ID = 「職員ID」
	 *
	 * 「職員マスター」.有効開始日 =「ユーザー情報」.有効開始日
	 *
	 * 「職員マスター」.パスワード = 「新パスワード」
	 *
	 * 「職員マスター」.パスワード更新日 = 「当日日付」
	 *
	 * 職員マスター(TSTAFFM)を更新する。
	 *
	 * SQLID
	 *
	 * TSTAFFM_UPDATE
	 *
	 * 引渡しデータ
	 *
	 * 「職員マスター」
	 *
	 * 「例外処理」
	 *
	 * 更新失敗の場合は、「ApplicationException」を返す。
	 *
	 * メッセージコード
	 *
	 * M10150CM
	 *
	 * パラメーター
	 *
	 * なし
	 *
	 * 7.06でTSTAFFMを更新する成功場合、「HbAuthenticationImpl.UPDATE_RESULT_0」を「処理結果」に設定する。
	 *
	 * 8.0処理結果を返す。
	 *
	 * @param oldPassword 旧パスワード  
	 * @param newPassword 新パスワード  
	 * @return updateResult 処理結果 0: 更新成功, 1: 旧パスワード不一致, 2: パスワードポリシー違反1,3: パスワードポリシー違反2,4: パスワードポリシー違反3,5: パスワードポリシー違反4
	 */
	String updatePassword(String oldPassword, String newPassword);

	/**
	 * LDAPのパスワードを更新する
	 *
	 * 処理詳細：
	 * HbUserのgetValidStaffInfo()を呼び出し、「職員基本情報」を取得する。
	 *
	 * ソッド名：
	 *
	 * HbUser.getValidStaffInfo()
	 *
	 * 引渡しデータ
	 *
	 * 職員IDセッションより
	 *
	 * 現在の日付
	 *
	 * 「例外処理」
	 *
	 * セッションから「職員ID」を取得できない場合は、「ApplicationException」を返す。
	 *
	 * メッセージコード
	 *
	 * M10560WS
	 *
	 * パラメーター
	 *
	 * なし
	 *
	 * 1.で取得した「職員基本情報」をチェックする。
	 *
	 * 「例外処理」
	 *
	 * 検出件数が1件より多い場合は、「ApplicationException」を返す。
	 *
	 * メッセージコード
	 *
	 * メッセージID =M10190WS
	 *
	 * パラメーター
	 *
	 * 職員情報データ
	 *
	 * 「例外処理」
	 *
	 * 検出件数が0件の場合は、「ApplicationException」を返す。
	 *
	 * メッセージコード
	 *
	 * メッセージID =M10190WS
	 *
	 * パラメーター
	 *
	 * 職員情報データ
	 *
	 * 2の検出件数が1件の場合、LDAPのについてのチェックする 。
	 *
	 * 内部メソッドを呼び出して、LDAPのについてのチェックする 。
	 *
	 * メソッド名：
	 *
	 * HbAuthenticationImpl.passwordPolicyCheckForLDAP()
	 *
	 * 引渡しデータ
	 *
	 * 旧パスワード
	 *
	 * 新パスワード
	 *
	 * 1.で取得した「職員基本情報」
	 *
	 * 3.1で取得するチェック結果を「処理結果」に設定する。
	 *
	 * 「処理結果」は「CommonConstant.EMPTY」の場合、必要に応じて職員マスターを更新する。
	 *
	 * HbComblcmMaster.getComblcmInfo()より、「パスワード同期要否」を取得する。
	 *
	 * ソッド名：
	 *
	 * bComblcmMaster.getComblcmInfo()
	 *
	 * 引渡しデータ
	 *
	 * 'COM'
	 *
	 * ’PasswordPolicy'
	 *
	 * 'PwSync'
	 *
	 * 4.1で取得したパスワード同期要否が"1"(同期する) の場合に、以下のようにTSTAFFMを更新する。
	 *
	 * 「職員マスター」(TstaffmDTO)を新規作成して、更新条件をセットする。
	 *
	 * 「職員マスター」.職員ID = 「ログインID」
	 *
	 * 「職員マスター」.有効開始日 =「ユーザー情報」.有効開始日
	 *
	 * 「職員マスター」.パスワード = 入力値「新パスワード」
	 *
	 * 「職員マスター」.パスワード更新日 = 「当日日付」
	 *
	 * 職員マスター(TSTAFFM)を更新する。
	 *
	 * SQLID
	 *
	 * TSTAFFM_UPDATE
	 *
	 * 引渡しデータ
	 *
	 * 「職員マスター」
	 *
	 * 「例外処理」
	 *
	 * 更新失敗の場合は、「ApplicationException」を返す。
	 *
	 * メッセージコード
	 *
	 * M10190WS
	 *
	 * パラメーター
	 *
	 * 職員情報データ
	 *
	 * 4.2でTSTAFFMを更新する成功場合、「HbAuthenticationImpl.UPDATE_RESULT_0」を「処理結果」に設定する。
	 *
	 * 処理結果を返す。
	 *
	 * @param oldPassword 旧パスワード  
	 * @param newPassword 新パスワード  
	 * @return updateResult 処理結果 0: 更新成功, 1: 旧パスワード不一致, 2: パスワードポリシー違反1,3: パスワードポリシー違反2,4: パスワードポリシー違反3,5: パスワードポリシー違反4
	 */
	String updatePasswordLDAP(String oldPassword, String newPassword);

}